package com.shengapp.api;

import com.shengapp.models.ApiRet;
import com.shengapp.models.Config;
import com.shengapp.util.HttpUtil;
import org.json.JSONArray;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: sheng-app
 * @Date: 2021/7/26 16:00
 */
public class Kfc extends Client {

    public Kfc(Config config) {
        this.key = config.key;
        this.secret = config.secret;
        this.url = config.url;
    }


    /**
     * 获取全国所有网点餐厅,请自行存储到数据库实现业务逻辑。
     * 建议定期更新，更新会增加或者删减
     *
     * @return
     */
    public ApiRet getAllStore() {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        return new HttpUtil(url, key, secret).send("/getAllStore", params, false);
    }

    /**
     * 指定餐厅以获取门店所有餐品。
     * 菜单固定更新时间8.00 9.30 10.00 11.00 14.00 17:00。
     * 运营时间为肯德基7:00-23:00、奈雪的茶10:00-22:00，非营业时间会返回标识。
     * 地址: /getMenuAndProduct
     * 肯德基支持只返回超划算产品
     * 地址: /getOnSaleMenu
     *
     * @param storeCode 店铺编号
     * @param takeout   是否外送 0否（默认），1是
     * @return
     */
    public ApiRet getMenuAndProduct(String storeCode, Integer takeout) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        params.put("storeCode", storeCode);
        params.put("takeout", takeout.toString());
        return new HttpUtil(url, key, secret).send("/getMenuAndProduct", params, false);
    }

    public ApiRet getOnSaleMenu(String storeCode, Integer takeout) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        params.put("storeCode", storeCode);
        params.put("takeout", takeout.toString());
        return new HttpUtil(url, key, secret).send("/getOnSaleMenu", params, false);
    }


    /**
     * 单独获取产品选项。
     *
     * @param storeCode   店铺编号
     * @param productId   产品id
     * @param deliverType 配送方式   0自提1外送
     * @return
     */
    public ApiRet getProductDetail(String storeCode, Integer productId, Integer deliverType) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        params.put("storeCode", storeCode);
        params.put("productId", productId.toString());
        params.put("deliverType", deliverType.toString());
        return new HttpUtil(url, key, secret).send("/getProductDetail", params, false);
    }

    /**
     * 查询指定定位是否能够外送。
     *
     * @param latitude
     * @param longitude 经纬度
     * @return
     */
    public ApiRet canTakeout(String latitude, String longitude) {
        Map<String, String> params = new HashMap<>(10);
        params.put("latitude", latitude);
        params.put("longitude", longitude);
        params.put("type", String.valueOf(TYPE_KFC));
        return new HttpUtil(url, key, secret).send("/canTakeout", params, false);
    }

    /**
     * 确认页面使用。需要把最小时间和最长时间显示给客户看。
     * 并且该时间建议带到订单页面，用倒计时显示给客户看。
     * 接口有营业时间限制：肯德基7:00-23:00、奈雪的茶10:00-22:00
     *
     * @param products  Json数组	肯德基、奈雪需要。包含code和quantity
     * @param storeCode String	肯德基、奈雪需要。
     * @return
     */
    public ApiRet getPricesKfc(JSONArray products, String storeCode) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        params.put("products", products.toString());
        params.put("storeCode", storeCode);
        return new HttpUtil(url, key, secret).send("/getPrices", params, false);
    }

    /**
     * 提交订单接口，使用POST。提交后需要确认订单才发货。
     * 接口有营业时间限制：电影票7:00-24:00、肯德基7:00-23:00、奈雪的茶10:00-22:00、卡券不限制
     *
     * @param mobile           手机号
     * @param supplierCode     供应商号
     * @param partnerOrderCode 调用方订单号
     * @param remarks          备注
     * @param productInfo      产品信息
     * @param storeCode        店铺编码
     * @param takeaway         是否打包走
     * @return
     */
    public ApiRet addOrderKfc(String mobile, String supplierCode, String partnerOrderCode, String remarks, JSONArray productInfo, String storeCode, Integer takeaway) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        params.put("mobile", mobile);
        params.put("supplierCode", supplierCode);
        params.put("partnerOrderCode", partnerOrderCode);
        params.put("remarks", remarks);
        params.put("productInfo", productInfo.toString());
        params.put("storeCode", storeCode);
        params.put("takeaway", takeaway.toString());
        params.put("bookTime", "");
        params.put("takeout", "0");
        return new HttpUtil(url, key, secret).send("/addOrder", params, true);
    }


    /**
     * @param mobile               手机号
     * @param supplierCode         供应商号
     * @param partnerOrderCode     调用方订单号
     * @param remarks              备注
     * @param productInfo          产品信息
     * @param storeCode            店铺编码
     * @param takeaway             是否打包走
     * @param latitude
     * @param longitude            经纬度
     * @param name                 用户名
     * @param sex                  性别
     * @param deliverAddress       地址
     * @param deliverAddressDetail 详细地址门派号
     * @return
     */
    public ApiRet addOrderKfc(String mobile, String supplierCode, String partnerOrderCode, String remarks, JSONArray productInfo, String storeCode, Integer takeaway, String latitude, String longitude, String name, String sex, String deliverAddress, String deliverAddressDetail) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_KFC));
        params.put("mobile", mobile);
        params.put("supplierCode", supplierCode);
        params.put("partnerOrderCode", partnerOrderCode);
        params.put("remarks", remarks);
        params.put("productInfo", productInfo.toString());
        params.put("storeCode", storeCode);
        params.put("takeaway", takeaway.toString());
        params.put("bookTime", "");
        params.put("takeout", "1");
        params.put("latitude", latitude);
        params.put("longitude", longitude);
        params.put("name", name);
        params.put("sex", sex);
        params.put("deliverAddress", deliverAddress);
        params.put("deliverAddressDetail", deliverAddressDetail);
        return new HttpUtil(url, key, secret).send("/addOrder", params, true);
    }
}
